package cn.ycc1.springmvcparam.controller;

import cn.ycc1.springmvcparam.entity.Person;
import org.springframework.web.bind.annotation.*;

/**
 * 接收参数练习
 * @author ycc
 * @date 2024/9/23
 * 总结：
 * 1. @RequestParam可以设置多个，@RequestBody只能设置一个；
 * 2. @RequestParam可以接收get,post请求参数, 不设置默认值则参数必传；
 * 3. @RequestBody只接收json格式参数，且在请求体中，可以是get,post请求；
 * 4. 不用@RequestBody则可接收from-data方式/x-www-form-urlencoded方式的传参；
 */
@RestController
public class TestController {

    /**
     * 变量接收get请求参数- 用@RequestParam可以接收get,post请求参数
     * @param name
     * @return
     * 设置默认参数，不传参也不报错
     * @RequestParam可以设置多个，@RequestBody只能设置一个
     * ok
     */
    @GetMapping("/test")
    public String test(@RequestParam(value = "name", required = false, defaultValue = "ycc") String name) {
        System.out.println(name);
        return "test";
    }

    /**
     * 接收post请求参数-不设默认参数
     * @param name
     * @return
     * ok
     */
    @PostMapping("/test4")
    public String test4(@RequestParam(value = "name") String name) {
        System.out.println(name);
        return "test4";
    }

    /**
     * 变量接收post请求参数-不用@RequestBody
     * @param name from-data方式/x-www-form-urlencoded方式
     * @return
     * ok
     */
    @PostMapping("/test7")
    public String test7(String name, Integer age) {
        System.out.println(name);
        System.out.println(age);
        return "test7";
    }

    /**
     * 变量接收post请求参数-用@RequestBody
     * @param person json方式传参 {"name": "lisi2", "age": 18}
     * @return
     * ok
     */
    @PostMapping("/test8")
    public String test8(@RequestBody Person person) {
        System.out.println(person.getName());
        System.out.println(person.getAge());
        return "test8";
    }
    /**
     * 变量接收get请求参数-用@RequestBody
     * @param person json方式传参 {"name": "zhangsan", "age": 18}
     * @return
     * ok 接收参数也是正常的
     */
    @GetMapping("/test10")
    public String test10(@RequestBody Person person) {
        System.out.println(person.getName());
        System.out.println(person.getAge());
        return "test10";
    }



    /**
     * 变量接收post请求参数-不用@RequestBody
     * @param person json方式传参 {"name": "zhangsan", "age": 18}
     * @return
     * 不报错，但是person为null
     */
    @PostMapping("/test9")
    public String test9(Person person) {
        System.out.println(person.getName());
        System.out.println(person.getAge());
        return "test9";
    }

    /**
     * 变量接收post请求参数-用@RequestBody
     * @param name from-data方式
     * @return
     * 报错 请求体没内容
     */
    @PostMapping("/test6")
    public String test6(@RequestBody String name) {
        System.out.println(name);
        return "test6";
    }
    /**
     * 变量接收get请求参数-用@RequestBody
     * @param name {"name": "zhangsan"}
     * @return
     * 报错 接收的name值是json字符串
     */
    @GetMapping("/test5")
    public String test5(@RequestBody String name) {
        System.out.println(name);
        return "test5";
    }

    /**
     * 变量接收get请求参数-不用@RequestParam
     * @param name
     * @return
     * 报错
     */
    @GetMapping("/test3")
    public String test3(String name) {
        System.out.println(name);
        return "test3";
    }
    /**
     * 变量接收get请求参数-不设默认参数
     * @param name
     * @return
     * 报错 - 缺少参数
     */
    @GetMapping("/test2")
    public String test2(@RequestParam(value = "name") String name) {
        System.out.println(name);
        return "test2";
    }

}
